home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / report.arc / REPORT.ASM next >
Assembly Source File  |  1984-06-20  |  6KB  |  184 lines

  1.  
  2.  
  3. COMMENT * REPORT.COM        Written  by  James L. Johnsen
  4.                 402 Beech Street
  5.                 Fort Washington Md. 20744
  6.                 Home Phone (301) 292-7169 *
  7. ;
  8. .RADIX    16                ;ALL NUMERICS ENTERED ARE NOW BASE 16.
  9. STACKSEG     SEGMENT STACK        ;FAKE OUT THE LINKER.
  10. STACKSEG     ENDS                        
  11. CODESEG    SEGMENT PARA PUBLIC 'CODE'
  12.     ASSUME CS:CODESEG,DS:CODESEG,ES:NOTHING
  13.     ORG    100
  14. EFFZERO    EQU    0F0
  15. ZEROEFF    EQU    0F
  16. ;                        MOVE EVERYTHING TO STORAGE
  17.     MOV    WORD PTR [STORAX],AX
  18.     MOV    WORD PTR [STORBX],BX
  19.     MOV    WORD PTR [STORCX],CX
  20.     MOV    WORD PTR [STORDX],DX
  21.     MOV    WORD PTR [STORSP],SP
  22.     MOV    WORD PTR [STORBP],BP
  23.     MOV    WORD PTR [STORSI],SI
  24.     MOV    WORD PTR [STORDI],DI
  25.     MOV    WORD PTR [STORCS],CS
  26.     MOV    WORD PTR [STORDS],DS
  27.     MOV    WORD PTR [STORSS],SS
  28.     MOV    WORD PTR [STORES],ES
  29. ;                        PROCESS ALL THE VALUES
  30.     MOV    WORD PTR [VARIBLE1],'XA'
  31.     MOV    AX,WORD PTR [STORAX]
  32.     CALL    PROCESS1
  33.     MOV    WORD PTR [VARIBLE1],'XB'
  34.     MOV    AX,WORD PTR [STORBX]
  35.     CALL    PROCESS1
  36.     MOV    WORD PTR [VARIBLE1],'XC'
  37.     MOV    AX,WORD PTR [STORCX]
  38.     CALL    PROCESS1
  39.     MOV    WORD PTR [VARIBLE1],'XD'
  40.     MOV    AX,WORD PTR [STORDX]
  41.     CALL    PROCESS1
  42.     MOV    WORD PTR [VARIBLE1],'PS'
  43.     MOV    AX,WORD PTR [STORSP]
  44.     CALL    PROCESS1
  45.     MOV    WORD PTR [VARIBLE1],'PB'
  46.     MOV    AX,WORD PTR [STORBP]
  47.     CALL    PROCESS1
  48.     MOV    WORD PTR [VARIBLE1],'IS'
  49.     MOV    AX,WORD PTR [STORSI]
  50.     CALL    PROCESS1
  51.     MOV    WORD PTR [VARIBLE1],'ID'
  52.     MOV    AX,WORD PTR [STORDI]
  53.     CALL    PROCESS1
  54.     MOV    WORD PTR [VARIBLE1],'SC'
  55.     MOV    AX,WORD PTR [STORCS]
  56.     CALL    PROCESS1
  57.     MOV    WORD PTR [VARIBLE1],'SD'
  58.     MOV    AX,WORD PTR [STORDS]
  59.     CALL    PROCESS1
  60.     MOV    WORD PTR [VARIBLE1],'SS'
  61.     MOV    AX,WORD PTR [STORSS]
  62.     CALL    PROCESS1
  63.     MOV    WORD PTR [VARIBLE1],'SE'
  64.     MOV    AX,WORD PTR [STORES]
  65.     CALL    PROCESS1
  66. ;                        THEN RESTORE ALL THE REGISTERS
  67.     MOV    AX,WORD PTR [STORAX]
  68.     MOV    BX,WORD PTR [STORBX]
  69.     MOV    CX,WORD PTR [STORCX]
  70.     MOV    DX,WORD PTR [STORDX]
  71.     MOV    SP,WORD PTR [STORSP]
  72.     MOV    BP,WORD PTR [STORBP]
  73.     MOV    SI,WORD PTR [STORSI]
  74.     MOV    DI,WORD PTR [STORDI]
  75.     MOV    DS,WORD PTR [STORDS]
  76.     MOV    SS,WORD PTR [STORSS]
  77.     MOV    ES,WORD PTR [STORES]
  78.     INT    20
  79. PROCESS1:
  80.     MOV    BYTE PTR [STORAL],AL        ;AL TO STORAGE
  81.     MOV    BYTE PTR [STORAH],AH        ;AH TO STORAGE
  82.     CALL    HEXDEC                ;CONVERT TO ASCII
  83.     CALL    MOVE_TO_VARIABLES        ;MOVE ASCII TO STRING
  84.     XOR    AX,AX                ;CLEAR AX REG
  85.     CALL    SEND_REPORT            ;THEN REPORT CONTENTS
  86.     RET                    ;AND RETURN TO CALLER
  87. MOVE_TO_VARIABLES:
  88.     MOV    AL,BYTE PTR [LOW_NIBBLEAL]    ;LOW NIBBLE OF AL TO AL
  89.     MOV    BYTE PTR [VARIBLE5],AL        ;AL TO LOWNIB POS IN STRING
  90.     MOV    AL,BYTE PTR [HI_NIBBLEAL]    ;HI NIBBLE OF AL TO AL
  91.     MOV    BYTE PTR [VARIBLE4],AL        ;AL TO HINIB POS IN STRING
  92.     MOV    AL,BYTE PTR [LOW_NIBBLEAH]    ;LOW NIBBLE OF AH TO AL
  93.     MOV    BYTE PTR [VARIBLE3],AL        ;AL TO LOWNIB FOR AH POS
  94.     MOV    AL,BYTE PTR [HI_NIBBLEAH]    ;HI NIBBLE OF AH TO AL
  95.     MOV    BYTE PTR [VARIBLE2],AL        ;AL TO HINIB FOR AH POS
  96.     RET                    ;AND RETURN TO CALLER
  97. HEXDEC:    XOR    AX,AX                ;CLEAR AX REG
  98.     MOV    AL,BYTE PTR [STORAL]        ;GET VALUE
  99.     AND    AL,ZEROEFF            ;MASK OFF HI NIBBLE
  100.     CALL    PROC_LOWNIBBLE            ;AND GET THE ASCII FOR IT
  101.     MOV    BYTE PTR [LOW_NIBBLEAL],AL    ;THEN MOVE THAT TO STORAGE
  102.     XOR    AX,AX                ;CLEAR THE AX REG
  103.     MOV    AL,BYTE PTR [STORAL]        ;GET THE VALUE AGAIN
  104.     CALL    PROC_HINIBBLE            ;TO PROCESS THE HIGH NIBBLE
  105.     CALL    PROC_LOWNIBBLE            ;THEN TO THE SAME JOB AGAIN
  106.     MOV    BYTE PTR [HI_NIBBLEAL],AL    ;MOVE IT TO STORAGE
  107.     XOR    AX,AX                ;CLEAR THE AX REGISTER AGAIN
  108.     MOV    AL,BYTE PTR [STORAH]        ;MOVE THE AH REG VALUE INTO AL
  109.     AND    AL,ZEROEFF            ;AND MASK OFF THE HI NIBBLE
  110.     CALL    PROC_LOWNIBBLE            ;AND GET THE ASCII VALUE OF IT
  111.     MOV    BYTE PTR [LOW_NIBBLEAH],AL    ;THEN STORE IT
  112.     XOR    AX,AX                ;CLEAR THE AX REGISTER AGAIN
  113.     MOV    AL,BYTE PTR [STORAH]        ;AND GET THE AH REG VALUE AGAIN
  114.     CALL    PROC_HINIBBLE            ;PROCESS FOR THE HI NIBBLE
  115.     CALL    PROC_LOWNIBBLE            ;TO THE SAME JOB AGAIN
  116.     MOV    BYTE PTR [HI_NIBBLEAH],AL    ;AND STORE IT
  117.     XOR    AX,AX                ;CLEAR AX AGAIN
  118.     RET                    ;AND RETURN TO CALLER
  119. PROC_LOWNIBBLE:
  120.     DAA                    ;IF >9 THEN ADD 06
  121.     PUSH    AX                ;WHICH SET AUX_CARRY_FLAG                
  122.     LAHF                    ;SO LOAD THE FLAGS TO CHECK
  123.     AND    AH,10                ;MASK ALL EXCEPT AUX_FLAG
  124.     CMP    AH,10                ;CHECK FOR FLAG SET
  125.     JNZ    OVER1                ;IF IT ISN'T SET JUST ADD 30H
  126.     POP    AX                ;RESTORE THE SAVED DATA
  127.     ADD    AL,31                ;ELSE IT'S SET, ADD 31 [ >9 ]
  128.     JMP    OVER2                ;DON'T ADD AGAIN, JUMP OVER IT
  129. OVER1:    POP    AX                ;ADDING 30H IS FOR NUMBERS
  130.     ADD    AL,30                ;ADDING 31H IS FOR  A through F
  131. OVER2:    RET                    ;RETURN TO CALLER
  132. PROC_HINIBBLE:    
  133.     XOR    CX,CX                ;CLEAR CX, JUST TO BE SURE
  134.     AND    AL,EFFZERO            ;MASK OFF LEAST SIGNIFICANT NIBB 
  135.     MOV    CL,04                ;HOW MANY TIMES TO SHIFT?
  136.     SHR    AL,CL                ;THEN MOVE MOST SN TO LEAST SN
  137.     RET                    ;RETURN TO CALLER
  138. SEND_REPORT:
  139.     MOV    SI,OFFSET REPORT1        ;POINT TO STRING
  140.     XOR    CX,CX                ;CLEAR CX, JUST TO BE SURE
  141.     MOV    CL,3DH                ;HOW MANY CHARACTERS TO SEND
  142. NEXT:    LODSB                    ;LOAD INTO AL POINTED BY SI
  143.     MOV    AH,0EH                ;MOVE VIDEO FUNCTION INTO AH
  144.     MOV    BH,00                ;WRITE TTY TO PAGE ZERO(0)
  145.     INT    10                ;DO IT
  146.     LOOP    NEXT                ;LOOP IS, CX=CX-1 TILL CX=0000
  147.     RET                    ;WHEN CX=0000, RETURN
  148. REPORT1:    DB    'The '
  149. VARIBLE1:    DW    0
  150.         DB    ' Register Has The Value '
  151. VARIBLE2:    DB    0
  152. VARIBLE3:    DB    0
  153. VARIBLE4:    DB    0
  154. VARIBLE5:    DB    0
  155.         DB    ' HEX in it at the moment.',0AH,0DH
  156. STORAL:    DB    0
  157. STORAH:    DB    0
  158. STORAX:    DW    0
  159. STORBX:    DW    0
  160. STORCX:    DW    0
  161. STORDX:    DW    0
  162. STORSP:    DW    0
  163. STORBP:    DW    0
  164. STORSI:    DW    0
  165. STORDI:    DW    0
  166. STORCS:    DW    0
  167. STORDS:    DW    0
  168. STORSS:    DW    0
  169. STORES:    DW    0
  170. LOW_NIBBLEAL:    DB    0
  171. HI_NIBBLEAL:    DB    0
  172. LOW_NIBBLEAH:    DB    0
  173. HI_NIBBLEAH:    DB    0
  174. CODESEG    ENDS
  175.     END
  176.  
  177. 
  178. SS:    DW    0
  179. STORES:    DW    0
  180. LOW_NIBBLEAL:    DB    0
  181. HI_NIBBLEAL:    DB    0
  182. LOW_NIBBLEAH:    DB    0
  183. HI_NIBBLEAH:    DB    0
  184. CODES